package com.ykzb.pay.unionpay.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.ykzb.pay.unionpay.acp.sdk.SDKUtil;

/**
 * 银联支付接口
 * @author wyh
 *
 */
public class UnionpayPackUtil {
	/**
	 * 油卡支付
	 * @param code
	 * @param price
	 * @return
	 */
	public static String packGasUrl(String code,double price){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");

		HashMap<String, String> hm = new HashMap<String, String>();
		
		
		/***银联全渠道系统，产品参数，除了encoding自行选择外其他不需修改***/
		hm.put("version", UnionpayConfig.getVersion());   			  //版本号，全渠道默认值
		hm.put("encoding", UnionpayConfig.getCharset()); 			  //字符集编码，可以使用UTF-8,GBK两种方式
		hm.put("signMethod", "01");            			  //签名方法，只支持 01：RSA方式证书加密
		hm.put("txnType", "01");               			  //交易类型 ，01：消费
		hm.put("txnSubType", "01");            			  //交易子类型， 01：自助消费
		hm.put("bizType", "000201");           			  //业务类型，B2C网关支付，手机wap支付
		hm.put("channelType", "08");           			  //渠道类型，这个字段区分B2C网关支付和手机wap支付；07：PC,平板  08：手机
		
		/***商户接入参数***/
		hm.put("merId", UnionpayConfig.getMerId());    	          			  //商户号码，请改成自己申请的正式商户号或者open上注册得来的777测试商户号
		hm.put("accessType", "0");             			  //接入类型，0：直连商户 
		hm.put("orderId",code);             //商户订单号，8-40位数字字母，不能含“-”或“_”，可以自行定制规则		
		hm.put("txnTime", sdf.format(new Date()));        //订单发送时间，取系统时间，格式为YYYYMMDDhhmmss，必须取当前时间，否则会报txnTime无效
		hm.put("currencyCode", "156");         			  //交易币种（境内商户一般是156 人民币）		
		hm.put("txnAmt", ((int)(price*100))+"");             			      //交易金额，单位分，不要带小数点
		hm.put("reqReserved", "");        		      //请求方保留域，透传字段（可以实现商户自定义参数的追踪）本交易的后台通知,对本交易的交易状态查询交易、对账文件中均会原样返回，商户可以按需上传，长度为1-1024个字节		
		
		//前台通知地址，支付成功后的页面 点击“返回商户”按钮的时候将异步通知报文post到该地址
		hm.put("frontUrl", UnionpayConfig.getGasReturnUrl());
		
		//后台通知地址
		hm.put("backUrl", UnionpayConfig.getGasNotifyUrl());
		
		return packHtml(hm,UnionpayConfig.getGateUrl());

		
	}

	/**
	 * 转成html
	 * @param hm
	 * @return
	 */
	public static String packHtml(HashMap<String, String> hm,String url){
		Map<String, String> submitFromData = SDKUtil.signData(hm,UnionpayConfig.getCharset());  //报文中certId,signature的值是在signData方法中获取并自动赋值的，只要证书配置正确即可。
		String html = SDKUtil.createAutoFormHtml(url, submitFromData,UnionpayConfig.getCharset());   //生成自动跳转的Html表单

       return html;
	}
}
